/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.lifxue.jqda.util;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.lifxue.jqda.data.XmlData;
import org.lifxue.jqda.data.bean.AppInfoBean;

/**
 *全局变量
 * @author lifxue
 */
public class GlobalVar {

    private static Log logger = LogFactory.getLog(GlobalVar.class);
    public static String USER_HOME;////用户主目录
    public static String NEW_LINE;//换行符
    public static String FILE_PATH_DELIMITER; //文件系统分隔符
    public static char OS_NAME; //操作系统类型
    //操作系统32位还是64位
    public static boolean OS_64BIT; 

    //可变变量
    public static HashMap<String, List<AppInfoBean>> APPLICATIONS;//快速启动应用程序列表
    public static HashMap<String, List<String>> APP_SCAN_DIR;//快速启动扫描目录
    public static HashMap<String, String> CONFIG;//config配置文件内容
    //热键数据  String -- 程序全路径；
    //String --热键标识和组合键（其中第一位是标识，后面是组合键，中间使用“:”间隔）
    public static HashMap<String, String> HOTKEY;
    
    //public static List<String> INDEX_SCAN_DIR;//搜索扫描目录
    //public static List<String> INDEX_SCAN_TYPE;//搜索文件类型
    //public static String       INDEX_CYCLE;//搜索周期
    //public static String       INDEX_LASTTIME;//最后一次搜索的时间（毫秒）



    //初始化全局变量
    public static void init() {
        initSystemVar();
        CONFIG = new HashMap<String, String>();
        HOTKEY = new HashMap<String, String>();
        initConfig();
        APPLICATIONS = new HashMap<String, List<AppInfoBean>>();
        APP_SCAN_DIR = new HashMap<String, List<String>>();
        initApps();

//        INDEX_SCAN_DIR = new ArrayList<String>();
//        INDEX_SCAN_TYPE = new ArrayList<String>();
//        INDEX_CYCLE = "每天一次";
//        Date date = new Date();
//        INDEX_LASTTIME = String.valueOf(date.getTime());//当前时间（毫秒）

        //initIndex();
    }

    /**
     * 初始化一些不能更改的系统参数
     */
    private static void initSystemVar() {

        //用户主目录
        USER_HOME = System.getProperty("user.home");
        //换行分隔符
        NEW_LINE = System.getProperty("line.separator");
        //文件路径分隔符
        FILE_PATH_DELIMITER = System.getProperty("file.separator");
        //操作系统类型
        //logger.debug(System.getProperty("os.name"));
        if (System.getProperty("os.name").equalsIgnoreCase("linux")) {
            OS_NAME = GlobalConstant.LINUX;
            if(System.getProperty("os.arch").indexOf("64") != -1){//若os.arch是64位，则认为操作系统也是64位
                OS_64BIT = true;
            }else{
                OS_64BIT = false;
            }            
        } else if (System.getProperty("os.name").startsWith("Windows")) {
            OS_NAME = GlobalConstant.WINDOWS;
            if(System.getProperty("os.arch").indexOf("64") != -1){//若os.arch是64位，则认为操作系统也是64位
                OS_64BIT = true;
            }else{
                //os.arch是32位，有可能是32位的java安装在64位操作系统上，所以还需判断
                OS_64BIT = (System.getenv("ProgramFiles(x86)") != null);
            }
        } else {
            OS_NAME = GlobalConstant.OTHER_OS;
            OS_64BIT = false;
        }
    }

    /**
     *解析Apps数据
     */
    private static void initApps() {
        File file = new File(GlobalVar.USER_HOME + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.DEFAULT_CONFIG_DIR + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.APPS_FILE);
        if (!FileAndDir.findFile(GlobalConstant.APPS_FILE, GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER)) {//文件不存在
            FileAndDir.createAppHome(GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER);//创建目录
            try {
                new XmlData().createXml(file);//创建xml文件（空）
            } catch (Exception ex) {
                logger.debug(ex);
            }
        } else {
              XmlData xd = new XmlData();
            xd.readAppsFile(file);
            GlobalVar.APPLICATIONS = xd.getApps_app();
            GlobalVar.APP_SCAN_DIR = xd.getApps_dirs();
        }
    }

    /**
     * 解析配置文件
     */
    private static void initConfig() {
        File file = new File(GlobalVar.USER_HOME + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.DEFAULT_CONFIG_DIR + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.CONFIG_FILE);
        if (!FileAndDir.findFile(GlobalConstant.CONFIG_FILE, GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER)) {//文件不存在
            FileAndDir.createAppHome(GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER);//创建目录
            try {
                new XmlData().createXml(file);//创建xml文件（空）
            } catch (Exception ex) {
                logger.debug(ex);
            }
        } else {
            XmlData xd = new XmlData();
            xd.readConfigFile(file);
            GlobalVar.CONFIG = xd.getConfigs_config();
            GlobalVar.HOTKEY = xd.getConfigs_hotkey();
        }
    }

    /**
     * 解析索引配置文件
     */
//    private static void initIndex() {
//        File file = new File(GlobalVar.USER_HOME + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.DEFAULT_CONFIG_DIR + GlobalVar.FILE_PATH_DELIMITER + GlobalConstant.INDEX_FILE);
//        if (!FileAndDir.findFile(GlobalConstant.INDEX_FILE, GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER)) {//文件不存在
//            FileAndDir.createAppHome(GlobalVar.USER_HOME, GlobalVar.FILE_PATH_DELIMITER);//创建目录
//            try {
//                new XmlData().createXml(file);//创建xml文件（空）
//                DataUtil.updateIndexFile();//保存数据到文件
//            } catch (Exception ex) {
//                logger.debug(ex);
//            }
//        } else {
//            XmlData xd = new XmlData();
//            xd.readIndexerFile(file);
//            GlobalVar.INDEX_SCAN_DIR = xd.getINDEX_DIR();
//            GlobalVar.INDEX_SCAN_TYPE = xd.getINDEX_TYPE();
//            GlobalVar.INDEX_CYCLE = xd.getINDEX_CYCLE();
//            GlobalVar.INDEX_LASTTIME = xd.getINDEX_LASTTIME();
//        }
//    }

}
